#ifndef __DEMO
#define __DEMO

/* ----------------------- 包含 Modbus 头文件 ---------------------------------- */

#include "mb.h"
#include "mbport.h"
#include "port_internal.h"

/* --------------------------- 包含BSP包 -------------------------------------- */

#if defined(STM32F1xx)
  #include "stm32f1xx_hal.h"
#elif defined(STM32F4xx)
  #include "stm32f4xx_hal.h"  
#elif defined(STM32G4xx) || defined(STM32G431xx)
  #include "stm32g4xx_nucleo.h"
#endif

/* --------------------------- LED引脚定义 ------------------------------------- */

#define LED0_GPIO_PORT          GPIOF
#define LED0_GPIO_PIN           GPIO_PIN_9
#define LED0_GPIO_CLK_ENABLE()  do{ __HAL_RCC_GPIOF_CLK_ENABLE(); }while(0) /* PF口时钟使能 */

/* -------------------------- LED控制宏定义 ------------------------------------ */

#define LED0(x)   do{ x ? \
                      HAL_GPIO_WritePin(LED0_GPIO_PORT, LED0_GPIO_PIN, GPIO_PIN_SET) : \
                      HAL_GPIO_WritePin(LED0_GPIO_PORT, LED0_GPIO_PIN, GPIO_PIN_RESET); \
                  }while(0)

/* LED取反定义 */
#define LED0_TOGGLE()   do{ HAL_GPIO_TogglePin(LED0_GPIO_PORT, LED0_GPIO_PIN); }while(0)    /* 翻转LED0 */

/* LED初始化宏函数 */
#define LED0_GPIO_Init() do{ \
    LED0_GPIO_CLK_ENABLE(); /* LED0时钟使能 */ \
    GPIO_InitTypeDef gpio_init_struct; \
    gpio_init_struct.Pin = LED0_GPIO_PIN; \
    gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; \
    gpio_init_struct.Pull = GPIO_PULLUP; \
    gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; \
    HAL_GPIO_Init(LED0_GPIO_PORT, &gpio_init_struct); \
    LED0(1); /* 初始化后关闭LED0 */ \
}while(0)

/* --------------------------- 函数声明 ---------------------------------------- */

void modbusInit(void);  /* 初始化Modbus */
void modbusPoll(void);  /* 轮询Modbus */

#endif
